Fatal表示程序遇到了致命的錯誤,需要退出,這時候使用Fatal記錄日誌後,然後程序退出,也就是說Fatal相當於先調用Print打印日誌,然後再調用os.Exit(1)退出程序。
總結來說 Fatal 完成:
1.打印輸出內容
2.退出應用程序
3.defer函數不會執行
以下是一個實際例子:
package main
import (
"fmt"
"log"
)
func main() {
var a = 1+1
if !(a == 2){
log.Fatal("stop!")
}
fmt.Println(a)
}
func init(){
log.SetPrefix("【IT邦幫忙】")
log.SetFlags(log.LstdFlags|log.Lshortfile|log.LUTC)
}
執行結果:
2
可以看到 我們初始化變數 a 為 1+1
若 a != 2 的情況下
呼叫 log.Fatal 印出錯誤訊息並中止程式
然而例子中的 a = 2
所以程式正常的執行 fmt.println 函式 印出了 a 的答案
倘若今天 a 我們故意設成 1+2
package main
import (
"fmt"
"log"
)
func main() {
var a = 1+2
if !(a == 2){
log.Fatal("stop!")
}
fmt.Println(a)
}
func init(){
log.SetPrefix("【IT邦幫忙】")
log.SetFlags(log.LstdFlags|log.Lshortfile|log.LUTC)
}
執行結果:
【IT邦幫忙】2019/10/08 16:24:35 log.go:18: stop!
因為 if 判定 a 出錯了
所以 log.Fatal 即時作用 印出錯誤訊息並中止相關程式
也就不會有後續的 fmt.println 的動作